package com.pair.micro.common.utils;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;

import java.util.Date;

/**
 * 时间工具类
 *
 * @author xubz
 * @since 2019-10-31
 */
public class MicroDateUtil {

  /** 时间格式 yyyy-MM-dd HH:mm:ss */
  public static final String YMDHMS = "yyyy-MM-dd HH:mm:ss";

  /** 时间格式 yyyyMMddHHmmssSSS */
  public static final String YMDHMSS = "yyyyMMddHHmmssSSS";

  /** 时间格式 yyyy-MM-dd HH:mm */
  public static final String YMDHM = "yyyy-MM-dd HH:mm";

  /** 时间格式 yyyy-MM-dd HH */
  public static final String YMDH = "yyyy-MM-dd HH";

  /** 时间格式 yyyy-MM-dd */
  public static final String YMD = "yyyy-MM-dd";

  /** 时间格式 yyyy-MM */
  public static final String YM = "yyyy-MM";

  /** 时间格式 HH:mm:ss */
  public static final String HMS = "HH:mm:ss";

  /** 时间格式 HH:mm */
  public static final String HM = "HH:mm";

  /** 时间格式 mm:ss */
  public static final String MS = "mm:ss";

  /** 开始时间 */
  public static final String START_TIME = " 00:00:00";

  /** 结束时间 */
  public static final String END_TIME = " 23:59:59";

  public static final String SECOND = "second";
  public static final String MINUTE = "minute";
  public static final String HOUR = "hour";
  public static final String DAY = "day";
  public static final String MONTH = "month";
  public static final String YEAH = "yeah";

  /**
   * @param []
   * @name: dateNow
   * @description 获取当前时间 Date型
   * @author xubz
   * @date 2023-09-1110:39
   * @return: java.util.Date
   */
  public static Date dateNow() {
    return DateUtil.date();
  }

  /**
   * @param []
   * @name: dateNowStr
   * @description 获取当前时间 String型Date
   * @author xubz
   * @date 2023-09-1110:39
   * @return: java.lang.String
   */
  public static String dateNowStr() {
    return DateUtil.now();
  }

  /**
   * @param []
   * @name: longNow
   * @description 获取当前时间 Long型
   * @author xubz
   * @date 2023-09-1110:39
   * @return: java.lang.Long
   */
  public static Long longNow() {
    return System.currentTimeMillis();
  }

  /**
   * @param []
   * @name: longNowStr
   * @description 获取当前时间 String型Long
   * @author xubz
   * @date 2023-09-1110:39
   * @return: java.lang.String
   */
  public static String longNowStr() {
    return String.valueOf(longNow());
  }

  /**
   * @name: unixNow
   * @description 获取当前时间 unix时间戳
   * @author xubz
   * @date 2/9/21 9:53 AM
   * @param []
   * @return: java.lang.Long
   */
  public static Long unixNow() {
    return System.currentTimeMillis() / 1000;
  }

  /**
   * @name: unixNowStr
   * @description 获取当前时间 String型unix时间戳
   * @author xubz
   * @date 2/9/21 9:53 AM
   * @param []
   * @return: java.lang.String
   */
  public static String unixNowStr() {
    return String.valueOf(unixNow());
  }

  /**
   * @name: authStartDateTime
   * @description 计算系统授权开始时间
   * @author xubz
   * @date 2020-07-31 13:17
   * @param [now]
   * @return: java.util.Date
   */
  public static DateTime authStartDateTime(Date now) {
    return DateUtil.beginOfDay(now);
  }

  /**
   * @name: authEndDateTime
   * @description 计算系统授权结束时间
   * @author xubz
   * @date 2020-07-31 13:18
   * @param [now, offset]
   * @return: java.util.Date
   */
  public static DateTime authEndDateTime(Date now, int offset) {
    return DateUtil.endOfDay(DateUtil.offsetDay(now, offset));
  }

  /**
   * @name: batchNoStr
   * @description 批次号
   * @author xubz
   * @date 2021/5/7 14:33
   * @param []
   * @return: java.lang.String
   */
  public static String batchNoStr() {
    return DateUtil.format(dateNow(), YMDHMSS);
  }

  /**
   * @name: batchNo
   * @description 批次号
   * @author xubz
   * @date 2021/5/7 14:33
   * @param []
   * @return: java.lang.Long
   */
  public static Long batchNo() {
    return Long.parseLong(batchNoStr());
  }
}
